package com.rrt.listener;

import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.stereotype.Component;


import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.rrt.domain.Asiento;
import com.rrt.domain.CompraEntrada;
import com.rrt.domain.ReservaAsiento;
import com.rrt.util.Config;
import com.rrt.util.Util;


@Component
public class EnvioCorreoConfirmacionPagoListener {

	private static Gson gson = new Gson();
	
	public void enviarCorreosReceived(String message) throws Exception {			
		Map<String, String> correo = gson.fromJson(message, HashMap.class);		
		String emailuser = correo.get("emailuser");		
		String htmlCorreo = "Gracias por seleccionar nuestro servicio.";		
		Util.enviarCorreo(emailuser, "Transaccion terminada de Reserva Tu trinchera", htmlCorreo);	
		
	}
	
	public void enviarMensajeReceived(Map<String, Object> message) throws Exception {
		System.out.println("mensaje:");
		System.out.println(message);
		try {
//			String uuid = (String) message.get("userPortal");
			String tipo = (String) message.get("tipo");
			String emailuser = (String) message.get("emailuser");
			String htmlCorreo = "";
			System.out.println(emailuser);	
			if(tipo.equals("compra")){
				String mQCorreoConfirmacionCompra = (String) message.get("MQCorreoConfirmacionCompra");	
				System.out.println(mQCorreoConfirmacionCompra);	
				CompraEntrada compra = gson.fromJson(mQCorreoConfirmacionCompra, CompraEntrada.class);
				int cliente = compra.getOperacionEnLinea().getIdCliente();
				int evento = compra.getEventoDeportivo().getIdEvento();
				int cantidadEntradas = cantidadDeEntradasCompradasPorClientePorEvneto(cliente, evento);	
				List<Asiento> lsitaAsientos = obtenerListaAsientosPorClientePorEventoCompradas(cliente,evento,compra.getPago().getIdPago());
				System.out.println(cantidadEntradas);
				htmlCorreo ="\n" +
						"\nEvento :"+compra.getEventoDeportivo().getDescripcion()+
						"\nCantidad de entradas compradas en total:"+cantidadEntradas+
						"\nFecha:"+compra.getEventoDeportivo().getFechaInicio()+
						"\nFecha Compra:"+compra.getOperacionEnLinea().getFechaOperacion()+
						"\nMonto total del pago:"+compra.getOperacionEnLinea().getMontoTotal();
				htmlCorreo+= "\n-----------------------------";
				if(lsitaAsientos!=null && lsitaAsientos.size()>0){
					for (Asiento asiento : lsitaAsientos) {
						htmlCorreo+= "\nAsientos numero: " +asiento.getNumero();
					}
				}				
				Util.enviarCorreo(emailuser, "Compra de Entradas en Reserva tu Trinchera", htmlCorreo);				
			}else
				if(tipo.equals("reserva")){
					String mQCorreoConfirmacionReserva = (String) message.get("MQCorreoConfirmacionReserva");	
					System.out.println(mQCorreoConfirmacionReserva);	
					ReservaAsiento reserva = gson.fromJson(mQCorreoConfirmacionReserva, ReservaAsiento.class);
					int cliente = reserva.getOperacionEnLinea().getIdCliente();
					int evento = reserva.getEventoDeportivo().getIdEvento();
					int cantidadEntradas = cantidadDeEntradasCompradasPorClientePorEvneto(cliente, evento);	
					List<Asiento> lsitaAsientos = obtenerListaAsientosPorClientePorEventoCompradas(cliente,evento,reserva.getPago().getIdPago());
					System.out.println(cantidadEntradas);
					htmlCorreo ="\n" +
							"\nEvento :"+reserva.getEventoDeportivo().getDescripcion()+
							"\nCantidad de entradas compradas en totatl:"+cantidadEntradas+
							"\nFecha:"+reserva.getEventoDeportivo().getFechaInicio()+
							"\nFecha Compra:"+reserva.getOperacionEnLinea().getFechaOperacion()+
							"\nTicket Pago:"+reserva.getOperacionEnLinea().getTicket()+
							"\nMonto total del pago:"+reserva.getOperacionEnLinea().getMontoTotal();
					htmlCorreo+= "\n-----------------------------";
					if(lsitaAsientos!=null && lsitaAsientos.size()>0){
						htmlCorreo+= "\n-Asientos en tu ultima comprada-";
						for (Asiento asiento : lsitaAsientos) {
							htmlCorreo+= "\nAsientos numero: " +asiento.getNumero();
						}
					}				
					Util.enviarCorreo(emailuser, "Paga tu reserva de Asiento en Reserva tu Trinchera", htmlCorreo);	
					
				}	
						
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
	
	private List<Asiento> obtenerListaAsientosPorClientePorEventoCompradas(int cliente,int evento,int pago) {
		try {
			String objetoRest = Util.restUtilGet( Config.getPropiedad("hhtp.rest.asiento")+"Cliente/"+cliente+"/Evento/"+evento+"/Pago/"+pago, "GET", "Accept", "application/json");
			System.out.println(objetoRest);
			List<Asiento> asientos = gson.fromJson(objetoRest, new TypeToken<List<Asiento>>(){}.getType());
			return asientos;
		} catch (IOException e) {
			e.printStackTrace();
		}	
		return null;
	}

	public int cantidadDeEntradasCompradasPorClientePorEvneto(int cliente, int idevento) throws IOException {
		String objetoRest = Util.restUtilGet( Config.getPropiedad("hhtp.rest.evento")+idevento+"/Cliente/"+cliente, "GET", "Accept", "application/json");	
		int r = Integer.parseInt(objetoRest);
		return r;
	}

	
}